package karaoke.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import karaoke.excepcion.DAOExcepcion;
import karaoke.modelo.Comentario;
import karaoke.util.ConexionBD;

public class ComentarioDAO extends BaseDAO{
	
		
	public Comentario insertar(Comentario comentario) throws DAOExcepcion {
        String query = "INSERT INTO COMENTARIO (CONTENIDO,CALIFICACION,FK_ID_SALA,FK_ID_CLIENTE) values (?,?,?,?)";
        Connection con = null;
        PreparedStatement stmt = null;
        ResultSet rs = null;
        try {
            con = ConexionBD.obtenerConexion();
            stmt = con.prepareStatement(query);
            stmt.setString(1, comentario.getContenido());
            stmt.setInt(2, comentario.getCalificacion());
            stmt.setInt(3, comentario.getIdSala());
            stmt.setInt(4, comentario.getIdCliente());
           
            int i = stmt.executeUpdate();
            if (i != 1) {
                throw new SQLException("No se pudo insertar");
            }
            // Obtener el ultimo id
            int id = 0;
            query = "SELECT LAST_INSERT_ID()";
            stmt = con.prepareStatement(query);

            rs = stmt.executeQuery();

            if (rs.next()) {
                id = rs.getInt(1);
            }
            comentario.setIdComentario(id);
            //reserva.setIdReserva(id);
        } catch (SQLException e) {
            System.err.println(e.getMessage());
            throw new DAOExcepcion(e.getMessage());
        } finally {
            this.cerrarResultSet(rs);
            this.cerrarStatement(stmt);
            this.cerrarConexion(con);
        }
        return comentario;
    }
	 public void eliminar(int idComentario) throws DAOExcepcion {
	        String query = "DELETE FROM COMENTARIO WHERE ID_COMENTARIO = ?";
	        Connection con = null;
	        PreparedStatement stmt = null;
	        try {
	            con = ConexionBD.obtenerConexion();
	            stmt = con.prepareStatement(query);
	            stmt.setInt(1, idComentario);
	            int i = stmt.executeUpdate();
	            if (i != 1) {
	                throw new SQLException("No se pudo eliminar");
	            }
	        } catch (SQLException e) {
	            System.err.println(e.getMessage());
	            throw new DAOExcepcion(e.getMessage());
	        } finally {
	            this.cerrarStatement(stmt);
	            this.cerrarConexion(con);
	        }
	    }
	 public Comentario actualizar(Comentario comentario) throws DAOExcepcion {
	        String query = "UPDATE COMENTARIO SET CONTENIDO=?,CALIFICACION=?, FK_ID_SALA=?, FK_ID_CLIENTE=? WHERE ID_COMENTARIO=?";
	        Connection con = null;
	        PreparedStatement stmt = null;
	        try {
	            con = ConexionBD.obtenerConexion();
	            stmt = con.prepareStatement(query);
	            stmt.setString(1,comentario.getContenido());
	            stmt.setInt(2, comentario.getCalificacion());
	            stmt.setInt(3, comentario.getIdSala());
	            stmt.setInt(4, comentario.getIdCliente());
	            int i = stmt.executeUpdate();
	            if (i != 1) {
	                throw new SQLException("No se pudo actualizar");
	            }
	        } catch (SQLException e) {
	            System.err.println(e.getMessage());
	            throw new DAOExcepcion(e.getMessage());
	        } finally {
	            this.cerrarStatement(stmt);
	            this.cerrarConexion(con);
	        }
	        return comentario;
	    }

	 public List<Comentario> listar() throws DAOExcepcion {
	        List<Comentario> lista = new ArrayList<Comentario>();
	        Connection con = null;
	        PreparedStatement stmt = null;
	        ResultSet rs = null;
	        try {
	            con = ConexionBD.obtenerConexion();
	            String query = "SELECT A.* FROM COMENTARIO WHERE ID_COMENTARIO LIKE ?";
	                    
	            stmt = con.prepareStatement(query);
	            rs = stmt.executeQuery();
	            
	                       
	            while (rs.next()) {
	                Comentario comentario = new Comentario();
	                comentario.setIdComentario(rs.getInt("ID_COMENTARIO"));
	                comentario.setContenido(rs.getString("CONTENIDO"));
	                comentario.setCalificacion(rs.getInt("CALIFICACION"));
	                comentario.setIdSala(rs.getInt("FK_ID_SALA"));
	                comentario.setIdCliente(rs.getInt("FK_ID_CLIENTE"));
	                
	                lista.add(comentario);
	            }

	        } catch (SQLException e) {
	            System.err.println(e.getMessage());
	            throw new DAOExcepcion(e.getMessage());
	        } finally {
	            this.cerrarResultSet(rs);
	            this.cerrarStatement(stmt);
	            this.cerrarConexion(con);
	        }
	        return lista;
	    }

}